home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SPACE 1
/
SPACE - Library 1 - Volume 1.iso
/
misc~1
/
4
/
modula2.src
< prev
next >
Wrap
Text File
|
1985-11-19
|
9KB
|
255 lines
Here are definition and implementation modules for bios calls
for use with TDI's Modula-2. I found these on CompuServe. I have
almost completed a similar interface for xbios calls, that i will post
shortly.
----
#!/bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #!/bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
# bioscall.def
# bioscall.mod
# This archive created: Mon Feb 10 03:10:05 1986
# By: Jwahar R. Bammi ()
export PATH; PATH=/bin:$PATH
echo shar: extracting "'bioscall.def'" '(1125 characters)'
if test -f 'bioscall.def'
then
echo shar: over-writing existing file "'bioscall.def'"
fi
sed 's/^X//' << \SHAR_EOF > 'bioscall.def'
XDEFINITION MODULE BIOScalls;
X
XFROM SYSTEM IMPORT ADDRESS , CODE , SETREG , REGISTER;
X
XEXPORT QUALIFIED getmpb, bconstat, bconin, bconout, rwabs, setexc, tickcal,
X getbpb, bcostat, mediach, drvmap, kbshift;
X
XPROCEDURE getmpb( pmpb : ADDRESS ); (* BIOS call #0 *)
X
XPROCEDURE bconstat ( dev : CARDINAL ) : LONGINT; (* BIOS call #1 *)
X
XPROCEDURE bconin( dev : CARDINAL ) : LONGINT; (* BIOS call #2 *)
X
XPROCEDURE bconout( dev : CARDINAL; ByteOut : CARDINAL ); (* BIOS call #3 *)
X
XPROCEDURE rwabs( buff : ADDRESS ; rwflag, count, recno, dev : CARDINAL )
X: LONGINT; (* BIOS call #4 *)
X
XPROCEDURE setexc( vecnum : CARDINAL; vec : ADDRESS): ADDRESS;
X (* BIOS call #5 *)
XPROCEDURE tickcal(): LONGINT; (* BIOS call #6 *)
X
XPROCEDURE getbpb( dev : CARDINAL ): ADDRESS; (* BIOS call #7 *)
X
XPROCEDURE bcostat( dev : CARDINAL ): LONGINT; (* BIOS call #8 *)
X
XPROCEDURE mediach( dev :CARDINAL ): LONGINT; (* BIOS call #9 *)
X
XPROCEDURE drvmap(): LONGCARD; (* BIOS call #10 *)
X
XPROCEDURE kbshift( mode : LONGINT ) : LONGINT; (* BIOS call *11 *)
X
XEND BIOScalls.
SHAR_EOF
if test 1125 -ne "`wc -c 'bioscall.def'`"
then
echo shar: error transmitting "'bioscall.def'" '(should have been 1125
-characters)'
fi
echo shar: extracting "'bioscall.mod'" '(6054 characters)'
if test -f 'bioscall.mod'
then
echo shar: over-writing existing file "'bioscall.mod'"
fi
sed 's/^X//' << \SHAR_EOF > 'bioscall.mod'
XIMPLEMENTATION MODULE BIOScalls;
X
XFROM SYSTEM IMPORT ADDRESS , CODE , SETREG , REGISTER;
X
X
XPROCEDURE getmpb( pmpb : ADDRESS ); (* BIOS call #0 *)
X
XBEGIN;
X
X SETREG(7,pmpb); (* put table address into register D7 *)
X CODE( 2F07H ); (* push longword D7 onto stack *)
X CODE(3F3CH,0,4E4DH); (* push call number onto stack and call TRAP #13 *)
X
XEND getmpb;
X
X
XPROCEDURE bconstat ( dev : CARDINAL ) : LONGINT; (* BIOS call #1 *)
X
XBEGIN;
X
X CODE( 7000H ); (* clear D0 register *)
X SETREG(7,ADDRESS(dev)); (* put device number into register D7 *)
X CODE( 3F07H ); (* push word D7 onto stack *)
X CODE(3F3CH,1,4E4DH); (* push call number onto stack and call TRAP #13 *)
X RETURN LONGINT(REGISTER(0)); (* return status of character device *)
X
XEND bconstat;
X
X
XPROCEDURE bconin( dev : CARDINAL ) : LONGINT; (* BIOS call #2 *)
X
XBEGIN;
X
X CODE ( 7000H ); (* clear D0 register *)
X SETREG(7,ADDRESS(dev)); (* put device number into register D7 *)
X CODE( 3F07H ); (* push word D7 onto stack *)
X CODE(3F3CH,2,4E4DH); (* push call number onto stack and call TRAP #13 *)
X RETURN LONGINT(REGISTER(0)); (* return input character longword *)
X
XEND bconin;
X
X
XPROCEDURE bconout( dev : CARDINAL; ByteOut : CARDINAL ); (* BIOS call #3 *)
X
XBEGIN;
X
X SETREG(7,ADDRESS(ByteOut)); (* put character into register D7 *)
X CODE( 3F07H ); (* push word D7 onto stack *)
X SETREG(7,ADDRESS(dev)); (* put device number into register D7 *)
X CODE( 3F07H ); (* push word D7 onto stack *)
X CODE(3F3CH,3,4E4DH); (* push call number onto stack and call TRAP #13 *)
X
XEND bconout;
X
X
XPROCEDURE rwabs( buff : ADDRESS ; rwflag, count, recno, dev : CARDINAL )
X: LONGINT; (* BIOS call #4 *)
X
XBEGIN;
X
X CODE ( 7000H ); (* clear D0 register *)
X SETREG(7,ADDRESS(dev)); (* put mass storage device number into *)
X (* register D7 *)
X CODE( 3F07H ); (* push word D7 onto stack *)
X SETREG(7,ADDRESS(recno)); (* put starting logical sector number into *)
X (* register D7 *)
X CODE( 3F07H ); (* push word D7 onto stack *)
X SETREG(7,ADDRESS(count)); (* put sector count into register D7 *)
X CODE( 3F07H ); (* push word D7 onto stack *)
X SETREG(7,buff); (* put buffer address into register D7 *)
X CODE( 2F07H ); (* push longword D7 onto stack *)
X SETREG(7,ADDRESS(rwflag)); (* put read/write flag into register D7 *)
X CODE( 3F07H ); (* push word D7 onto stack *)
X CODE(3F3CH,4,4E4DH); (* push call number onto stack and call TRAP #13 *)
X RETURN LONGINT(REGISTER(0)); (* return mass storage device error *)
X (* status word *)
XEND rwabs;
X
X
XPROCEDURE setexc( vecnum : CARDINAL; vec : ADDRESS): ADDRESS;
X (* BIOS call #5 *)
XBEGIN;
X
X CODE ( 7000H ); (* clear D0 register *)
X SETREG(7,vec); (* put vector address into register D7 *)
X CODE ( 2F07H ); (* push longword D7 onto stack *)
X SETREG(7,ADDRESS(vecnum)); (* put vector number into register D7 *)
X CODE( 3F07H ); (* push word D7 onto stack *)
X CODE(3F3CH,5,4E4DH); (* push call number onto stack and call TRAP #13 *)
X RETURN REGISTER(0); (* return old vector address *)
X
XEND setexc;
X
X
XPROCEDURE tickcal(): LONGINT; (* BIOS call #6 *)
X
XBEGIN;
X
X CODE ( 7000H ); (* clear D0 register *)
X CODE(3F3CH,6,4E4DH); (* push call number onto stack and call TRAP #13 *)
X RETURN LONGINT(REGISTER(0)); (* return system clock in milliseconds *)
X
XEND tickcal;
X
X
XPROCEDURE getbpb( dev : CARDINAL ): ADDRESS; (* BIOS call #7 *)
X
XBEGIN;
X
X CODE ( 7000H ); (* clear D0 register *)
X SETREG(7,ADDRESS(dev)); (* put mass storage device number into *)
X (* register D7 *)
X CODE( 3F07H ); (* push word D7 onto stack *)
X CODE(3F3CH,7,4E4DH); (* push call number onto stack and call TRAP #13 *)
X RETURN REGISTER(0); (* return BIOS parameter block pointer *)
X
XEND getbpb;
X
X
XPROCEDURE bcostat( dev : CARDINAL ): LONGINT; (* BIOS call #8 *)
X
XBEGIN;
X
X CODE ( 7000H ); (* clear D0 register *)
X SETREG(7,ADDRESS(dev)); (* put device number into register D7 *)
X CODE( 3F07H ); (* push word D7 onto stack *)
X CODE(3F3CH,8,4E4DH); (* push call number onto stack and call TRAP #13 *)
X RETURN LONGINT(REGISTER(0)); (* return device output status word *)
X
XEND bcostat;
X
X
XPROCEDURE mediach( dev :CARDINAL ): LONGINT; (* BIOS call #9 *)
X
XBEGIN;
X
X CODE ( 7000H ); (* clear D0 register *)
X SETREG(7,ADDRESS(dev)); (* put mass storage device number into *)
X (* register D7 *)
X CODE( 3F07H ); (* push word D7 onto stack *)
X CODE(3F3CH,9,4E4DH); (* push call number onto stack and call TRAP #13 *)
X RETURN LONGINT(REGISTER(0)); (* return mass storage device media *)
X (* status word *)
XEND mediach;
X
X
XPROCEDURE drvmap(): LONGCARD; (* BIOS call #10 *)
X
XBEGIN;
X
X CODE ( 7000H ); (* clear D0 register *)
X CODE(3F3CH,10,4E4DH); (* push call number onto stack and call TRAP #13 *)
X RETURN LONGCARD(REGISTER(0)); (* returns longword that maps active *)
X (* storage units available *)
XEND drvmap;
X
X
XPROCEDURE kbshift( mode : LONGINT ) : LONGINT; (* BIOS call *11 *)
X
XBEGIN;
X
X CODE ( 7000H ); (* clear D0 register *)
X SETREG(7,ADDRESS(mode)); (* put mode into register D7 *)
X CODE( 2F07H ); (* push longword D7 onto stack *)
X CODE(3F3CH,11,4E4DH); (* push call number onto stack and call TRAP #13 *)
X RETURN LONGINT(REGISTER(0)); (* return shift key status word *)
X
XEND kbshift;
X
X
XEND BIOScalls.
SHAR_EOF
if test 6054 -ne "`wc -c 'bioscall.mod'`"
then
echo shar: error transmitting "'bioscall.mod'" '(should have been 6054
-characters)'
fi
# End of shell archive
exit 0
--
Jwahar R. Bammi
CompuServe: 71515,155
Brought to you by the Club Network
The Club (517) 372-3131
The Club II (313) 334-8877